#ifndef TCP_AGREEMENT_H
#define TCP_AGREEMENT_H

#include<QByteArray>

/*******************************************************/
/*消息头*/
/*******************************************************/
#define MESSAGE_HEADER_L				0XFF
#define MESSAGE_HEADER_H				0XD8

struct MessageLength{               /*长度，2字节*/
    uint8_t OneByte;              	/*一字节*/
    uint8_t TwoByte;              	/*二字节*/
};

typedef struct						/*命令，2字节*/
{
    uint8_t OneByte;              	/*一字节*/
    uint8_t TwoByte;              	/*二字节*/
    uint8_t ThreeByte;              /*三字节*/
    uint8_t FourByte;              	/*四字节*/
}CommondNumber;

//设备序列号
typedef struct                      /*设备系列号结构体，2字节*/
{
    uint8_t OneByte;              	/*一字节*/
    uint8_t TwoByte;              	/*二字节*/
    uint8_t ThreeByte;              /*二字节*/
    uint8_t FourByte;              	/*二字节*/
}SerialNumber;

/*******************************************************/
//消息体
/*******************************************************/
typedef uint8_t Result;						/*结果类型*/

/*******************************************************/
/*错误码定义*/
/*******************************************************/
#define ContentRight                                            0x00			  		/*内容正确*/
#define ContentWrong                                            0x01                    /*内容错误*/
#define ChecksumError                                           0x02                    /*异或校验值错误*/
#define	MessageStructError										0x03                    /*消息结构错误*/
#define IllegalCommandError										0x04                    /*非法命令错误*/
#define IllegalWaterPowerSerialNumberError                      0x05                    /*非法设备系列号错误*/
#define OthersError                                             0x06                 /*其他错误*/

#pragma pack(push,1)
//内容
typedef struct						/*内容结构信息*/
{
    char *content;						/*内容*/
}ContentMessageTypeDef;
#pragma pack(pop)

/*******************************************************/
//消息尾
/*******************************************************/
#define MESSAGE_TAIL_L				0XFF
#define MESSAGE_TAIL_H				0XD9
typedef uint8_t CHECKNUM;					 /*异或校验值类型*/

/*******************************************************/
/*结构体*/
/*******************************************************/
//消息头
typedef struct
{
    uint8_t MessageHeader_L;        /*消息头低字节*/
    uint8_t MessageHeader_H;        /*消息头高字节*/
    MessageLength length;           /*消息总长度（含消息头、消息体、消息尾）*/
    CommondNumber command;          /*命令或响应类型 */
    SerialNumber Serial;            /*设备系列号结构体*/
}Message_HeaderTypeDef;

//消息尾
typedef struct
{
    uint8_t MessageTail_L;           /*消息尾低字节*/
    uint8_t MessageTail_H;     			 /*消息尾高字节*/
    CHECKNUM check;									 /*异或校验值*/
}Message_TailTypeDef;

/*一般消息回复（正确，错误）*/
typedef struct
{
    Message_HeaderTypeDef MessageHeader;	/*消息头结构体*/
    Result MessageResult;														/*结果值*/
    Message_TailTypeDef MessageTail;			/*消息尾结构体*/
}AnswerSpecialMessageTypeDef;

/* 通用消息回复（内容）*/
typedef struct{
    Message_HeaderTypeDef MessageHeader;	/*消息头结构体*/
    ContentMessageTypeDef MessageContent;
    Message_TailTypeDef MessageTail;			/*消息尾结构体*/
}AnswerCommonMessageTypeDef;

#endif // TCP_AGREEMENT_H
